﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using LibrarySolution.DB;
using LibrarySolution.Model.基础;

namespace LibrarySolution.DAO.基础
{
    class YhDao
    {
        DataTable dt = new DataTable();
        String sql;
        List<SqlParameter> list;

        public YhxxEntity doLogin(YhxxEntity yhxxEntity)
        {
            String[][] result;
            YhxxQuery(yhxxEntity);
            result = DBExecuteUtil.querySqlArray(sql, list.ToArray());
            if (result != null)
            {
                yhxxEntity.yh_no = result[0][0];
                yhxxEntity.yh_name = result[0][1];
                yhxxEntity.yh_pwd = result[0][2];
                yhxxEntity.yh_sex = result[0][3];
                yhxxEntity.yh_JB = result[0][4];
                yhxxEntity.yh_zcsj = result[0][5];
                yhxxEntity.yh_lxdh = result[0][6];
                yhxxEntity.yh_yjsl = result[0][7];
                yhxxEntity.yh_xjsl = result[0][8];
                yhxxEntity.yh_zh = result[0][9];
                yhxxEntity.yh_state = result[0][10];
                yhxxEntity.yh_zhye = result[0][11];
            }
            return yhxxEntity;
        }

        public String[] getYhZh()
        {
            String[] getYhZh;
            String[][] result;
            sql = "select yh_zh from jc_yhxx";
            result = DBExecuteUtil.querySqlArray(sql, null);
            getYhZh = new String[result.Length];
            for (int i = 0; i < result.Length; i++)
            {
                getYhZh[i] = result[i][0];
            }
            return getYhZh;
        }

        public DataTable getYhDataTable(YhxxEntity yhxxEntity)
        {
            YhxxQuery(yhxxEntity);
            dt = DBExecuteUtil.querySqlGetTable(sql, null);
            return dt;
        }

        public DataTable getYhNoTable()
        {
            sql = "select yh_no as 用户编号 from jc_yhxx where yh_state = '0'";
            dt = DBExecuteUtil.querySqlGetTable(sql, null);
            return dt;
        }

        public DataTable getDTbyYhNo(YhxxEntity yhxxEntity)
        {
            YhxxQuery(yhxxEntity);
            dt = DBExecuteUtil.querySqlGetTable(sql, list.ToArray());
            return dt;
        }

        public DataTable getDTbyYhName(YhxxEntity yhxxEntity)
        {
            YhxxQuery(yhxxEntity);
            dt = DBExecuteUtil.querySqlGetTable(sql, list.ToArray());
            return dt;
        }

        public DataTable getYhBb(YhxxEntity yhxxEntity)
        {
            YhxxQuery(yhxxEntity);
            sql = "select yh_name as 用户名称,yh_yjsl as 已借书量,yh_ghsl as 已还书量,yh_zjsl as 总借书量 from jc_yhxx";
            dt = DBExecuteUtil.querySqlGetTable(sql, list.ToArray());
            return dt;
        }

        public void MarkYh(String yhNo,String yhState)
        {
            String sql;
            if (yhState == "有效")
                sql = "update jc_yhxx set yh_state = 1 where yh_no = @yhNo";
            else
                sql = "update jc_yhxx set yh_state = 0 where yh_no = @yhNo";
            SqlParameter[] parameters = {new SqlParameter("@yhNo",yhNo)};
            dt = DBExecuteUtil.querySqlGetTable(sql, parameters);
        }

        public void delSelectedRow(string yhNo)
        {
            String sql = "delete from jc_yhxx where yh_no = @yhNo";
            SqlParameter[] parameters = { new SqlParameter("@yhNo", yhNo) };
            DBExecuteUtil.querySqlV(sql, parameters);
        }

        public String getYhPwdByNo(string yhNo)
        {
            sql = "select yh_pwd from jc_yhxx where yh_no = @yhNo and yh_state = 0";
            SqlParameter[] parameters = { new SqlParameter("@yhNo", yhNo) };
            String result = DBExecuteUtil.querySql(sql,parameters);
            return result;
        }

        public YhxxEntity getYhxxByNo(string yhNo,string q)
        {
            YhxxEntity yhxxEntity = new YhxxEntity();
            sql = "select yh_code ,yh_no ,yh_name ,yh_sex ,jb.yhjb_name ,yh_zcsj ,yh_lxdh ," +
                "yh_yjsl ,yh_xjsl ,yh.yhjb_no ,yh_pwd,yh_zh,yhjb_jyqx,yhjb_xjqx,yh_state,yh_zhye"+
                " from jc_yhxx yh,jc_yhjb jb where yh.yhjb_no = jb.yhjb_no and yh_no = @yhNo";
            if (q == "1") sql += " and yh.yh_state = 0";
            SqlParameter[] parameters = { new SqlParameter("@yhNo", yhNo) };
            string[][] result = DBExecuteUtil.querySqlArray(sql, parameters);
            if (result != null && result.Length != 0)
            {
                yhxxEntity = new YhxxEntity();
                yhxxEntity.yh_code = result[0][0];
                yhxxEntity.yh_no = result[0][1];
                yhxxEntity.yh_name = result[0][2];
                yhxxEntity.yh_sex = result[0][3];
                yhxxEntity.yh_JB = result[0][4];
                yhxxEntity.yh_zcsj = result[0][5];
                yhxxEntity.yh_lxdh = result[0][6];
                yhxxEntity.yh_yjsl = result[0][7];
                yhxxEntity.yh_xjsl = result[0][8];
                yhxxEntity.yhjb_no = result[0][9];
                yhxxEntity.yh_pwd = result[0][10];
                yhxxEntity.yh_zh = result[0][11];
                yhxxEntity.jyqx = result[0][12];
                yhxxEntity.xjqx = result[0][13];
                yhxxEntity.yh_state = result[0][14];
                yhxxEntity.yh_zhye = result[0][15];
            }
            return yhxxEntity;
        }

        public void UpdateYhxx(YhxxEntity yhxxEntity)
        {
            YhxxQuery(yhxxEntity);
            sql = "update jc_yhxx set yh_no=@yhNo,yh_zh=@yhZh, yh_name=@yhName, yh_pwd=@yhPwd, yh_sex=@yhSex, yhjb_no=@JbNo," +
                " yh_zcsj=@Zcsj, yh_lxdh=@Lxdh, yh_yjsl=@Yjsl, yh_xjsl=@Xjsl,yh_state=@yhState where yh_no=@yhNo";
            DBExecuteUtil.querySqlV(sql, list.ToArray());
        }

        public void updataYhPwd(YhxxEntity yhxxENtity)
        {
            YhxxQuery(yhxxENtity);
            sql = "update jc_yhxx set yh_pwd = @yhPwd where yh_no = @yhNo";
            DBExecuteUtil.querySqlV(sql, list.ToArray());
        }

        public void insertYhxx(YhxxEntity yhxxEntity)
        {
            YhxxQuery(yhxxEntity);
            sql = "insert into jc_yhxx values (@yhNo,@yhZh, @yhName, @yhPwd, @yhSex, @JbNo," +
                " @Zcsj, @Lxdh, @Yjsl, @Xjsl,0,0,0,100)";
            DBExecuteUtil.querySqlV(sql, list.ToArray());
        }

        public String getYhjbNobyName(string JbName)
        {
            String result;
            sql = "select yhjb_no from jc_yhjb where yhjb_name = @JbName";
            SqlParameter[] parameters = { new SqlParameter("@JbName", JbName) };
            result = DBExecuteUtil.querySql(sql, parameters);
            return result;
        }

        public void Yhcz(String yhNo,String Zhye)
        {
            Zhye = Convert.ToString((Convert.ToDouble(Zhye) + Convert.ToDouble(getYhye(yhNo))));
            SqlParameter[] param = { new SqlParameter("@yhNo", yhNo) ,
                                   new SqlParameter("@Zhye",Zhye)};
            sql = "update jc_yhxx set yh_zhye=@Zhye where yh_no=@yhNo";
            DBExecuteUtil.querySqlV(sql, param);
        }

        private string getYhye(String yhNo)
        {
            String result;
            SqlParameter[] param = { new SqlParameter("@yhNo", yhNo) };
            sql = "select yh_zhye from jc_yhxx where yh_no=@yhNo";
            result = DBExecuteUtil.querySql(sql, param);
            return result;
        }

        public String getMaxYhNo()
        {
            String result;
            sql = "select max(yh_no) from jc_yhxx";
            result = DBExecuteUtil.querySql(sql, null);
            return Convert.ToString((int.Parse(result) + 1));
        }

        //  公共查询字段
        private void YhxxQuery(YhxxEntity yhxxEntity)
        {
            list = new List<SqlParameter>();
            sql = "select yh_no as 用户编号,yh_name as 用户名,yh_pwd as  用户密码, yh_sex as 用户性别," +
                "jb.yhjb_name as 用户级别,yh_zcsj as 注册时间,yh_lxdh as 联系电话,yh_yjsl as 已借数量," +
                "yh_xjsl as 续借书量,yh_zh as 用户账号,(case yh_state when 0 then '有效' else '无效' end) as 用户状态"+
                ",yh_zhye as 账号余额 from jc_yhxx yh,jc_yhjb jb where yh.yhjb_no = jb.yhjb_no";
            if (yhxxEntity.yh_no != null)
            {
                list.Add(new SqlParameter("@yhNo", Convert.ToInt64(yhxxEntity.yh_no)));
                sql += " and yh.yh_no = @yhNo";
            }
            if (yhxxEntity.yh_name != null)
            {
                list.Add(new SqlParameter("@yhName", yhxxEntity.yh_name));
                sql += " and yh.yh_name like '%' + @yhName + '%'";
            }
            if (yhxxEntity.yh_pwd != null)
            {
                list.Add(new SqlParameter("@yhPwd", yhxxEntity.yh_pwd));
                sql += " and yh.yh_pwd = @yhPwd";
            }
            if (yhxxEntity.yh_sex != null)
            {
                list.Add(new SqlParameter("@yhSex", yhxxEntity.yh_sex));
                sql += " and yh.yh_sex = @yhSex";
            }
            if (yhxxEntity.yhjb_no != null)
            {
                list.Add(new SqlParameter("@JbNo", Convert.ToInt64(yhxxEntity.yhjb_no)));
                sql += " and yh.yhjb_no = @JbNo";
            }
            if (yhxxEntity.yh_zcsj != null)
            {
                list.Add(new SqlParameter("@Zcsj", yhxxEntity.yh_zcsj));
                sql += " and yh.yh_zcsj = @Zcsj";
            }
            if (yhxxEntity.yh_lxdh != null)
            {
                list.Add(new SqlParameter("@Lxdh", yhxxEntity.yh_lxdh));
                sql += " and yh.yh_lxdh = @Lxdh";
            }
            if (yhxxEntity.yh_yjsl != null)
            {
                list.Add(new SqlParameter("@Yjsl", yhxxEntity.yh_yjsl));
                sql += " and yh.yh_yjsl = @Yjsl";
            }
            if (yhxxEntity.yh_xjsl != null)
            {
                list.Add(new SqlParameter("@Xjsl", yhxxEntity.yh_xjsl));
                sql += " and yh.yh_xjsl = @Xjsl";
            }
            if (yhxxEntity.yh_zh != null)
            {
                list.Add(new SqlParameter("@yhZh", yhxxEntity.yh_zh));
                sql += " and yh.yh_zh = @yhZh";
            }
            if (yhxxEntity.yh_state != null)
            {
                list.Add(new SqlParameter("@yhState", yhxxEntity.yh_state));
                sql += " and yh.yh_state = @yhState";
            }
            if (yhxxEntity.yh_zhye != null)
            {
                list.Add(new SqlParameter("@yhZhye", yhxxEntity.yh_zhye));
                sql += " and yh.yh_state = @yhZhye";
            }
            sql += " order by yh_no";
        }
    }
}
